﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace sy5_2
{
    public partial class Form1 : Form
    {
        // 定义图形的矩形/顶点（根据实验要求）
        private Rectangle rect1 = new Rectangle(10, 10, 80, 80); // 矩形
        private Rectangle rect2 = new Rectangle(100, 10, 80, 80); // 圆形（椭圆）
        private Rectangle rect3 = new Rectangle(280, 10, 80, 90); // 扇形
        private Point[] pts = new Point[] { // 五边形顶点
            new Point(190, 40),
            new Point(230, 10),
            new Point(270, 40),
            new Point(250, 90),
            new Point(210, 90)
        };

        private Graphics g; // 画布对象

        public Form1()
        {
            InitializeComponent();
            this.Text = "图形绘制与填充";
            this.Size = new Size(400, 200); // 设置窗体大小
        }

        // 窗体加载时初始化Graphics
        private void Form1_Load(object sender, EventArgs e)
        {
            g = this.CreateGraphics(); // 获取窗体的画布
        }


        // ========== 1. “绘图”按钮：绘制图形边框 ==========
        private void btnDraw_Click(object sender, EventArgs e)
        {
            this.Refresh(); // 清空之前的绘制

            // 画笔1：单色画笔（蓝色，宽度2）
            Pen pen1 = new Pen(Color.Blue, 2);
            // 画笔2：网格画笔（WideDownwardDiagonal样式）
            HatchBrush hatchPenBrush = new HatchBrush(HatchStyle.WideDownwardDiagonal, Color.Yellow, Color.Red);
            Pen pen2 = new Pen(hatchPenBrush, 3);

            // 绘制矩形（用pen1）
            g.DrawRectangle(pen1, rect1);
            // 绘制圆形（椭圆，用pen2）
            g.DrawEllipse(pen2, rect2);
            // 绘制五边形（用pen1）
            g.DrawPolygon(pen1, pts);
            // 绘制扇形（Pie，用pen2）
            g.DrawPie(pen2, rect3, 0, 120); // 0=起始角度，120=扫过角度

            // 释放资源
            pen1.Dispose();
            pen2.Dispose();
            hatchPenBrush.Dispose();
        }


        // ========== 2. “网格式”按钮：网格画刷填充图形 ==========
        private void btnHatch_Click(object sender, EventArgs e)
        {
            this.Refresh();

            // 网格画刷1：HorizontalBrick样式
            HatchBrush hatchBrush1 = new HatchBrush(HatchStyle.HorizontalBrick, Color.Pink, Color.Red);
            // 网格画刷2：DarkHorizontal样式
            HatchBrush hatchBrush2 = new HatchBrush(HatchStyle.DarkHorizontal, Color.Blue, Color.Yellow);

            // 填充矩形（用hatchBrush1）
            g.FillRectangle(hatchBrush1, rect1);
            // 填充圆形（用hatchBrush2）
            g.FillEllipse(hatchBrush2, rect2);
            // 填充五边形（用hatchBrush1）
            g.FillPolygon(hatchBrush1, pts);
            // 填充扇形（用hatchBrush2）
            g.FillPie(hatchBrush2, rect3, 0, 120);

            // 释放资源
            hatchBrush1.Dispose();
            hatchBrush2.Dispose();
        }


        // ========== 3. “纹理刷”按钮：图片纹理填充图形 ==========
        private void btnTexture_Click(object sender, EventArgs e)
        {
            this.Refresh();

            // 纹理刷1：用图片1填充
            TextureBrush textureBrush1 = new TextureBrush(Properties.Resources.img1); // 需提前添加图片资源
            // 纹理刷2：用图片2填充
            TextureBrush textureBrush2 = new TextureBrush(Properties.Resources.img2);

            // 填充矩形（用textureBrush1）
            g.FillRectangle(textureBrush1, rect1);
            // 填充圆形（用textureBrush2）
            g.FillEllipse(textureBrush2, rect2);
            // 填充五边形（用textureBrush1）
            g.FillPolygon(textureBrush1, pts);
            // 填充扇形（用textureBrush2）
            g.FillPie(textureBrush2, rect3, 0, 120);

            // 释放资源
            textureBrush1.Dispose();
            textureBrush2.Dispose();
        }


        // ========== 4. “退出”按钮：关闭程序 ==========
        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}